package check

import (
	"fmt"
	"golang.org/x/net/html/charset"
	"io/ioutil"
	"log"
	"os"
	"path/filepath"
)

// DetectMimeType  根据后缀名判断文件格式是否符合要求
func DetectMimeType(dirPath string) {
	// 替换为你的目录路径
	err := filepath.Walk(dirPath, func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}

		if !info.IsDir() {
			if err != nil {
				log.Printf("检查文件类型时出错 %s: %v", path, err)
				return nil
			}
			// filepath.Base(path) 获取文件名及后缀
			// 检查文件是否为指定类型
			switch filepath.Ext(path) {
			case ".csv", ".CSV":
				e := detectEncoding(path)
				ReadCsv(path, e)
				fmt.Printf("%s CSV文件%s, \n", path, e)
			case ".xlsx", ".xls", ".XLSX", ".XLS":
				fmt.Printf("%s Excel文件\n", path)
			case ".dmp", ".DMP":
				fmt.Printf("%s Oracle数据库导出文件\n", path)
			default:
				fmt.Printf("%s类型%s不符合要求，确认是否解压成功，文件夹下不能有其它格式文件\n", path, filepath.Ext(path))
			}
		}

		return nil
	})

	if err != nil {
		log.Fatal(err)
	}
}

// detectEncoding 检测文件编码格式
func detectEncoding(filePath string) string {
	// 读取CSV文件内容
	fileContent, err := ioutil.ReadFile(filePath)
	if err != nil {
		log.Fatal(err)
	}
	// 使用charset包的DetermineEncoding函数来检测编码
	// 这里我们只传入文件内容的前1024个字节，因为DetermineEncoding函数只需要查看前1024个字节
	_, name, certain := charset.DetermineEncoding(fileContent, "")
	if !certain {
		fmt.Printf("CSV文件编码为: %s \n", name)
	} else {
		fmt.Printf("CSV文件编码为: %s \n", name)
	}
	return name
}
